//package com.kws.commercial.util;
//
//import com.kws.commercial.business.UploadFileBusiness;
//import com.kws.common.core.mapper.Label;
//import org.apache.commons.compress.utils.IOUtils;
//import org.apache.commons.fileupload.FileItem;
//import org.apache.commons.fileupload.disk.DiskFileItemFactory;
//import org.apache.commons.lang3.StringUtils;
//import org.apache.poi.ss.usermodel.*;
//import org.apache.poi.xssf.usermodel.XSSFWorkbook;
//import org.aspectj.apache.bcel.classfile.Module;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.http.MediaType;
//import org.springframework.web.multipart.MultipartFile;
//import org.springframework.web.multipart.commons.CommonsMultipartFile;
//
//import java.io.*;
//import java.lang.reflect.Field;
//import java.text.SimpleDateFormat;
//import java.time.LocalDateTime;
//import java.time.format.DateTimeFormatter;
//import java.util.Arrays;
//import java.util.Date;
//import java.util.LinkedList;
//import java.util.List;
//
///**
// * <b>ExportFileDownloadUtil</b>
// *
// * @description: ExportFileDownloadUtil <br>
// * @date: 2024/10/30 14:07 <br>
// * @author: lhm <br>
// * @version: 1.0 <br>
// */
//@Configuration
//public class ExportFileDownloadUtil {
//    private static final Logger logger = LoggerFactory.getLogger(ExportFileDownloadUtil.class);
//
//    @Autowired
//    private UploadFileBusiness uploadFileBusiness;
//
//    public String exportFile(List<?> exportList, Field[] fields, List<String> table, String fileName){
//        SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd"); // 定义日期格式化器
//        try (Workbook workbook = new XSSFWorkbook()) {
//            // 创建一个工作表
//            Sheet sheet = workbook.createSheet(fileName);
//
//            int rowNum = 0; // 开始时写入列名
//            Row headerRow = sheet.createRow(rowNum++);
//
//            List<Field> fieldList = new LinkedList<>();
//            if(table != null){
//                for (String comName : table) {
//                    for (Field field : fields) {
//                        String fieldName = field.getName();
//                        if(StringUtils.equals(comName,fieldName)){
//                            fieldList.add(field);
//                            break;
//                        }
//                    }
//                }
//            }else{
//                fieldList = Arrays.asList(fields);
//            }
//
//            for (int i = 0; i < fieldList.size(); i++) {
//                Field field = fieldList.get(i);
//                field.setAccessible(true);
//                headerRow.createCell(i).setCellValue(getFieldLabel(field));
//            }
//
//            for (Object objectData : exportList) {
//                Row row = sheet.createRow(rowNum++);
//                for (int i = 0; i < fieldList.size(); i++) {
//                    Field field = fieldList.get(i);
//                    field.setAccessible(true);
//                    Object value = field.get(objectData);
//                    // 检查字段是否为Date类型，如果是则格式化为字符串
//                    if (value instanceof Date) {
//                        Cell cell = row.createCell(i);
//                        cell.setCellValue(dateFormatter.format((Date) value));
//                    }  else {
//                        row.createCell(i).setCellValue(value != null ? value.toString() : "");
//                    }
//                }
//            }
//
//            for (int i = 0; i < fieldList.size(); i++) {
//                boolean isEmptyColumn = true;
//                for (int j = 1; j < rowNum; j++) { // 从第二行开始检查，因为第一行是列名
//                    Cell cell = sheet.getRow(j).getCell(i);
//                    if (cell != null && cell.getCellType() != CellType.BLANK) {
//                        isEmptyColumn = false;
//                        break;
//                    }
//                }
//                if (isEmptyColumn) {
//                    sheet.setColumnHidden(i, true); // 隐藏为空的列
//                }
//            }
//            // 获取当前日期
//            LocalDateTime currentDate = LocalDateTime.now();
//            // 格式化日期为指定格式（例如：年月日）
//            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy.MM.dd HH.mm");
//            String formattedDate = currentDate.format(formatter);
//            String excelName = (fileName+formattedDate+".xlsx");
//            // 将工作簿保存到文件
//            try (FileOutputStream outputStream = new FileOutputStream(excelName)) {
//                workbook.write(outputStream);
//                outputStream.flush();
//            } catch (IOException e) {
//                // 处理文件写入异常
//                e.printStackTrace();
//                return "导出 Excel 文件失败";
//            }
//            //文件地址
//            File file = new File(excelName);
//            //上传
//            MultipartFile multipartFile = getMultipartFile(file);
//            String url = uploadFileBusiness.uploadFile(multipartFile);
//            return url;
//        } catch (IOException e) {
//            // 处理工作簿创建异常
//            e.printStackTrace();
//            return "创建 Excel 工作簿失败";
//        } catch (IllegalAccessException e) {
//            throw new RuntimeException(e);
//        }
//    }
//
//    public static String getFieldLabel(Field field) {
//        Label labelAnnotation = field.getAnnotation(Label.class);
//        if (labelAnnotation != null) {
//            String[] labelValues = labelAnnotation.value();
//            if (labelValues.length > 0) {
//                return labelValues[0]; // 返回数组的第一个元素作为Label值
//            }
//        }
//        return field.getName(); // 如果注解不存在或者数组为空，返回字段名作为默认值
//    }
//
//
//    public static MultipartFile getMultipartFile(File file) {
//        FileItem item = new DiskFileItemFactory().createItem("file"
//                , MediaType.MULTIPART_FORM_DATA_VALUE
//                , true
//                , file.getName());
//        try (InputStream input = new FileInputStream(file);
//             OutputStream os = item.getOutputStream()) {
//            // 流转移
//            IOUtils.copy(input, os);
//        } catch (Exception e) {
//            throw new IllegalArgumentException("Invalid file: " + e, e);
//        }
//
//        return new CommonsMultipartFile(item);
//    }
//}
